'''
Description: 管理员数据库模块（文件同步数据库模块）
Author: HowsenFisher
Date: 2021-04-08 11:18:06
LastEditTime: 2021-04-11 09:30:22
LastEditors: liutq
Reference: 
'''
from sqlalchemy import *
from sqlalchemy.ext.declarative import *
from sql.SQL import *
from sqlalchemy.orm import *
import json
from Config import conf

# 获取Base
Base = declarative_base()

'''
@description: 获取session函数
@param  {*}
@return {*}
'''
def makeSession():
    # 获取engine
    this_engine = getFileDB()
    # 获取session对象
    MessageSession = sessionmaker(bind=this_engine)
    message_session = MessageSession()
    return this_engine,message_session


class File(Base):
    '''
    @description: File表
    @param  {*}
    @return {*}
    '''
    # 表名fileinfo
    __tablename__ = 'fileinfo'
    # 所有列
    file_id = Column(Integer,primary_key=True,autoincrement=True)
    filepath = Column(String(128))
    Owner = Column(String(15))
    ConfigTime = Column(String(128))
    type = Column(String(10))

    '''
    @description: 返回结果转json函数
    @param  {*}
    @return {*}
    @param {*} self
    '''
    def to_json(self):
        dict = self.__dict__
        if "_sa_instance_state" in dict:
            del dict["_sa_instance_state"]
        return dict

'''
@description: 在数据库中创建表函数
@param  {*}
@return {*}
'''
def create_table():
    # 获取session
    this_engine,message_session=makeSession()
    # 创建所有继承了Base的表格
    Base.metadata.create_all(this_engine)

'''
@description: 插入File信息函数
@param  {*}
@return {*}
@param {*} infos
'''
def insertFile(infos):
    # 获取session
    this_engine,message_session=makeSession()
    # 查询到要更新的记录
    file = message_session.query(File).filter(File.filepath==infos['filepath']).all()
    if len(file) == 0:
        # 数据库添加新file信息
        message_session.add(File(filepath=infos['filepath'],Owner=infos['owner'],ConfigTime=infos['ConfigTime'],type=infos['type']))
    else:
        pass
    # 数据库提交更改
    message_session.commit()

'''
@description: 删除file信息函数
@param  {*}
@return {*}
@param {*} infos
'''
def deleteFile(infos):
    # 获取session
    this_engine,message_session=makeSession()
    # 查询到要删除的file记录
    file = message_session.query(File).filter(File.filepath.like(str(infos['filepath']).replace("\\","\\\\")+"%")).all()
    # print(file)
    for info in file:
        # 删除这条记录
        message_session.delete(info)
    # 数据库提交更改
    message_session.commit()

'''
@description: 更新file信息
@param  {*}
@return {*}
@param {*} infos
'''
def updateFile(infos):
    # 获取session
    this_engine,message_session=makeSession()
    # 查询到要更新的记录
    file = message_session.query(File).filter(File.filepath==infos['filepath']).first()
    # 修改最新修改时间
    file.ConfigTime =infos['ConfigTime']
    # 修改所有者
    file.Owner = infos['owner']
    # 数据库提交更改
    message_session.commit()

'''
@description: 文件路径变更函数
@param  {*}
@return {*}
@param {*} infos
'''
def moveFile(infos):
    # 获取session
    this_engine,message_session=makeSession()
    # 查询到需要变更的记录
    file = message_session.query(File).filter(File.filepath==infos['oldfilepath']).first()
    # 修改为新的路径
    file.filepath =infos['newfilepath']
    # 修改所有者
    file.Owner = infos['owner']
    # 数据库提交更改
    message_session.commit()

'''
@description: 获取所有文件记录函数
@param  {*}
@return {*}
'''
def getAllFiles():
    # 获取session
    this_engine,message_session=makeSession()
    # 获取所有文件记录
    resList = message_session.query(File).all()
    return [i.to_json() for i in resList]

# 创建表格（如有表格则无效果）
create_table()

if __name__ == '__main__':
    pass
